package heap;


import java.util.*;

/**
 * 347.前K个高频元素
 * 给你一个整数数组 nums 和一个整数 k ，请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
 */
public class topKFrequent {
    /**
     * hot100一刷
     * hot100二刷
     */
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        //大顶堆
        PriorityQueue<int[]> queue = new PriorityQueue<>((o1, o2) -> o2[1] - o1[1]);
        for (int num : map.keySet()) {
            queue.offer(new int[]{num, map.get(num)});
        }
        int[] result = new int[k];
        for (int i = 0; i < k; i++) {
            int[] top = queue.poll();
            result[i] = top[0];
        }
        return result;
    }


}
